﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UtilityExtensions;
using DAL;

namespace BOL.Ventas
{
   public class DocumentoVentaitemInfo
    {

        public DocumentoVentaitemInfo()
        {
            
        }

            public DocumentoVentaitemInfo(int	idDocumentoVenta,
                                         OrdenVentaFormato ordenVentaFormato )
        {
                
                    
                
            
            this.idInternal=Parametros.GenerarID();

            SetDescripcion(ordenVentaFormato);
            this.codigo = ordenVentaFormato.numDocumento;

                // importante no debe pasar del origen valor
            totalOrigen = ordenVentaFormato.total-ordenVentaFormato.totalFin;
                
                // ! Importante saber  solo el saldo

            this.setTotal(ordenVentaFormato.total - ordenVentaFormato.totalFin);
       
            this.idDocumentoVenta = idDocumentoVenta;
            this.idOrdenVentaFormato = ordenVentaFormato.idInternal;
        }
            
            public int idInternal { get; set; }
            public string	codigo { get; set; }
            private  decimal totalOrigen { get; set; }
            public string descripcion { get; set; }


            public void SetDescripcion(OrdenVentaFormato ordenVentaFormato)
            {

                descripcion = string.Format("{0} DE {1} EN {2}:{3} DEL PROYECTO {4} UBICADO EN {5}", 
                                                                                    ordenVentaFormato.ConceptoItem.descripcion,
                                                                                    ordenVentaFormato.OrdenVentaItem.UI.descripcion,
                                                                                    ordenVentaFormato.OrdenVentaItem.UI.UILocalizacion.descripcion,
                                                                                    ordenVentaFormato.OrdenVentaItem.UI.UIBloque.descripcion,
                                                                                    ordenVentaFormato.OrdenVentaItem.UI.Etapa.Proyecto.descripcion,
                                                                                    ordenVentaFormato.OrdenVentaItem.UI.Etapa.Proyecto.direccion
                                            );
            }

            public void SetDescripcion(string   descripcion)
            {
                this.descripcion = descripcion;
            }
            
            public decimal	total { get; set; }
            public decimal	IGVTotal { get; set; }
            public decimal	subTotal { get; set; }
            public int	    idDocumentoVenta { get; set; }
            public int	    idOrdenVentaFormato { get; set; }
            public string	totalStr { get; set; }
            public string   IGVTotalStr { get; set; }
            public string   subTotalStr { get; set; }

            public void setTotal(decimal total)
            {
                if (total > this.totalOrigen)
                {
                    throw new Exception("Monto no puede ser superior al Origen");
                }

                //espero IGV de  18% o 19% ->:
                decimal IGVPorcentaje = DbUtil.Db.GrupoDatoitems.Single(p => p.idInternal == 10).descripcion.ToDecimal().Value;

                decimal igvValor = IGVPorcentaje / 100;
                this.total = total;
                this.subTotal = total / (1 + igvValor);
                this.IGVTotal = total - subTotal;

                this.totalStr = this.total.ToString("N2");
                this.subTotalStr = this.subTotal.ToString("N2");
                this.IGVTotalStr = this.IGVTotal.ToString("N2");
            }
           

           

   }

   public class DocumentoVentaRefInfo
   {
       public int idDocumentoVenta { get; set; }
       public int idDocumentoVentaRef { get; set; }
       public string documentoVentaRefStr { get; set; }
   }
}
